#!/bin/bash

export DEBIAN_FRONTEND=noninteractive
export APT_LISTCHANGES_FRONTEND=none

# 调试模式开关（设置为1启用调试，0禁用）
DEBUG=0
debug_log="$HOME/debug.log"
tempfile=$(mktemp)
trap 'rm -f "$tempfile"; clear' EXIT  

log() {
  [ "$DEBUG" -eq 1 ] && echo "DEBUG: $(date +%Y-%m-%d_%H:%M:%S) $1" >> "$debug_log"
}

silent_apt() {
    # 优化apt命令执行：保留进度条，隐藏其他冗余输出
    "$@" -y --quiet=2 2>>"$debug_log" # 使用--quiet=2减少输出，但保留进度条
}

show_main_menu() {
    log "显示主菜单"
    dialog --clear --backtitle "Termux 包管理器" \
        --menu "请选择操作：" $((LINES-5)) $((COLUMNS-10)) 6 \
        Search   "通过关键字搜索包" \
        List     "列出已安装的包" \
        Update   "更新系统软件包" \
        Uninstall "卸载软件包" \
        Clean    "清理无用依赖" \
        Exit     "退出程序" 2>"$tempfile"
    
    case $(<"$tempfile") in
        Search) search_package ;;
        List) list_installed_packages ;;
        Update) update_packages ;;
        Uninstall) uninstall_package ;;
        Clean) clean_packages ;;
        Exit) exit 0 ;;  # 明确的退出选项处理
        *) exit 0 ;;
    esac
}

search_package() {
    log "进入搜索包功能"
    dialog --inputbox "请输入要搜索的关键字：" 10 50 2>"$tempfile"
    keyword=$(<"$tempfile")
    [ -z "$keyword" ] && return

    # 静默更新包列表
    log "正在更新包数据库..."
    silent_apt apt update

    log "执行搜索: $keyword"
    mapfile -t results < <(apt search "$keyword" 2>/dev/null | grep "/")

    if [ ${#results[@]} -eq 0 ]; then
        dialog --msgbox "未找到与 '$keyword' 相关的软件包" 10 50
        return
    fi

    # 构建带描述的菜单选项
    menu_items=()
    for result in "${results[@]}"; do
        pkg_name=$(echo "$result" | cut -d/ -f1)
        pkg_desc=$(echo "$result" | cut -d/ -f2- | sed 's/^ *//;s/ *$//')
        menu_items+=("$pkg_name" "$pkg_desc")
    done

    dialog --clear --backtitle "Termux 包管理器" \
        --menu "选择要安装的软件包 (找到 ${#results[@]} 个)" \
        $((LINES-10)) $((COLUMNS-10)) $((LINES-15)) \
        "${menu_items[@]}" 2>"$tempfile"
    
    pkg_choice=$(<"$tempfile")
    [ -z "$pkg_choice" ] && return

    if dialog --yesno "确认安装 '$pkg_choice' 吗？" 10 50; then
        log "开始安装: $pkg_choice"
        silent_apt apt install "$pkg_choice"
        dialog --msgbox "'$pkg_choice' 安装完成" 10 50
    fi
}

update_packages() {
    log "检查更新"
    silent_apt apt update

    mapfile -t updates < <(apt list --upgradable 2>/dev/null | grep -v "Listing" | awk '{print $1}' | cut -d/ -f1)
    
    if [ ${#updates[@]} -eq 0 ]; then
        dialog --msgbox "系统已经是最新状态" 10 50
        return
    fi

    update_options=("全部更新" "更新所有软件包")
    for pkg in "${updates[@]}"; do
        update_options+=("$pkg" "")
    done

    dialog --clear --backtitle "Termux 包管理器" \
        --menu "可用的更新 (共 ${#updates[@]} 个)" \
        $((LINES-10)) $((COLUMNS-10)) $((LINES-15)) \
        "${update_options[@]}" 2>"$tempfile"
    
    choice=$(<"$tempfile")
    [ -z "$choice" ] && return

    if [ "$choice" = "全部更新" ]; then
        log "执行全部更新"
        silent_apt apt upgrade
    else
        log "更新单个包: $choice"
        silent_apt apt install --only-upgrade "$choice"
    fi
    
    dialog --msgbox "更新操作已完成" 10 50
}

list_installed_packages() {
    log "获取已安装包列表"
    mapfile -t installed < <(apt list --installed 2>/dev/null | grep -v "Listing" | awk '{print $1}' | cut -d/ -f1)
    
    dialog --clear --backtitle "Termux 包管理器" \
        --menu "已安装软件包 (共 ${#installed[@]} 个)" \
        $((LINES-10)) $((COLUMNS-10)) $((LINES-15)) \
        "${installed[@]}" 2>"$tempfile"
    
    selected_pkg=$(<"$tempfile")
    [ -z "$selected_pkg" ] && return
    
    pkg_info=$(apt show "$selected_pkg" 2>/dev/null)
    dialog --title "'$selected_pkg' 的详细信息" \
        --msgbox "$pkg_info" $((LINES-10)) $((COLUMNS-10))
}

uninstall_package() {
    mapfile -t installed < <(apt list --installed 2>/dev/null | grep -v "Listing" | awk '{print $1}' | cut -d/ -f1)
    
    dialog --clear --backtitle "Termux 包管理器" \
        --menu "选择要卸载的软件包" \
        $((LINES-10)) $((COLUMNS-10)) $((LINES-15)) \
        "${installed[@]}" 2>"$tempfile"
    
    pkg_choice=$(<"$tempfile")
    [ -z "$pkg_choice" ] && return

    if dialog --yesno "确认要卸载 '$pkg_choice' 吗？" 10 50; then
        log "卸载包: $pkg_choice"
        silent_apt apt remove "$pkg_choice"
        dialog --msgbox "'$pkg_choice' 已卸载" 10 50
    fi
}

clean_packages() {
    if dialog --yesno "确认要清理无用依赖吗？" 10 50; then
        log "执行清理操作"
        silent_apt apt autoremove
        silent_apt apt clean
        dialog --msgbox "系统清理完成" 10 50
    fi
}

# 确保dialog已安装（静默安装）
if ! command -v dialog &> /dev/null; then
    log "安装dialog工具"
    silent_apt apt install dialog
fi

# 主循环
while true; do
    show_main_menu
done